package string;
//String面试题1
public class Demo_StringAudition {
    public static void main(String[] args) {
        //question1
        String s1 = "abc";//字符串常量池
        String s2 = "abc";
        System.out.println(s1 == s2);//？true
        System.out.println(s1.equals(s2));//？true
        //== 在两边都是基本数据类型的时候比较的是数值
        //两边都是引用数据类型的时候比较的是地址值

        //question2
        String s3 = new String("abc1");//创建了几个对象
        //先在在常亮池里创建对象“abc“再在堆内存里创建一个”abc“副本，所以是两个对象

        //question3
        String s4 = new String("abc2");
        String s5 = "abc2";
        System.out.println(s4 == s5);//?false
        // s4记录的是堆内存中对象的地址值，s5记录的是常量池中的地址值
        System.out.println(s4.equals(s5));//?true

        //question4
        String s6 = "a"+"b"+"c"+"d";
        String s7 = "abcd";
        System.out.println(s6 == s7);//?true
        //在编译时就变成了"abcd" ，这叫做常亮优化机制
        System.out.println(s6.equals(s7));//?true

        //question5
        String s8 = "ab";
        String s9 = "abc";
        String s10 = s8 + "c";
        //底层通过StringBuffer的append进行拼接，再通过toString方法转换成字符串
        System.out.println(s8 == s9);//false
        System.out.println(s9.equals(s10));//true

    }
}
